/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controller;

import dao.DAOFactory;
import dao.ProdutoDAO;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import model.Produto;
import ordenacao.OrdenacaoPorCodigoProduto;
import ordenacao.OrdenacaoPorDescricaoProduto;
import utils.ExcecaoSCEV;




public class CtrCadastroProduto {
     private static CtrCadastroProduto umCtrCadastroProduto;
    ProdutoDAO produtoDAO;

    private CtrCadastroProduto(){


     DAOFactory daoFactory = new DAOFactory();
     produtoDAO = daoFactory.getProdutoDAO();

    }
    //comentário
    public static CtrCadastroProduto getInstance(){
        if (umCtrCadastroProduto == null){
            umCtrCadastroProduto = new CtrCadastroProduto();
        }
        return umCtrCadastroProduto;
    }


    public List <Produto> listarTodos(int ordenacao) throws ExcecaoSCEV{
        List <Produto>lista = new ArrayList <Produto>();
        lista = produtoDAO.pegarTodos();
        ordenar(ordenacao, lista);
        return lista;
    }

    private boolean validar(Produto produto) throws ExcecaoSCEV {

        if(produto.getCodigoProduto() == null || produto.getCodigoProduto().equals("")){
            throw new ExcecaoSCEV("Codigo deve ser preenchido");
        }
        if(produto.getDescricao() == null || produto.getDescricao().trim().equals("")){
            throw new ExcecaoSCEV("Nome deve ser preenchido");
        }
        if(produto.getAlbum() == null || produto.getAlbum().trim().equals("")){
            throw new ExcecaoSCEV("Album deve ser preenchido");
        }
        if(produto.getGenero() == null || produto.getGenero().trim().equals("")){
            throw new ExcecaoSCEV("Genero deve ser preenchido");
        }
        if (produto.getTipo() == null || produto.getTipo().equals("")){
            throw new ExcecaoSCEV("Tipo deve ser preenchido");
        }
        if (produto.getQuantidade() == null || produto.getQuantidade().equals("")){
            throw new ExcecaoSCEV("Número deve ser preenchido");
        }
        if (produto.getPreco() == null || produto.getPreco().equals("")){
            throw new ExcecaoSCEV("Preço deve ser preenchido");
        }
        if (produto.getPrecoCusto() == null || produto.getPrecoCusto().equals("")){
            throw new ExcecaoSCEV("Preço de custo deve ser preenchido");
        }
        return true ;
    }

    public void incluir (Produto produto) throws ExcecaoSCEV {
        try {
            if (validar(produto))
              produtoDAO.incluir(produto);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }

    }

    public void alterar (Produto produto) throws ExcecaoSCEV {
        try {
            if (validar(produto))
                produtoDAO.alterar(produto);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }

    }

        public void excluir (Produto produto) throws ExcecaoSCEV {
        try {
            produtoDAO.excluir(produto);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }

    }

    public void carregar(Produto produto) throws ExcecaoSCEV {
        try {
            produtoDAO.carregar(produto);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }
    }

    public void ordenar(int ordenacao, List<Produto> lista) {

        if (ordenacao == 0) {
            Collections.sort(lista, new OrdenacaoPorCodigoProduto());
        } else {
            Collections.sort(lista, new OrdenacaoPorDescricaoProduto());
        }
    }





    }
        
        
    
   